์ค์ ๋ ๋๋ง ๊ฒฝ๋ก๋ฅผ ๋ถ์ํ๊ณ ์ต์ ํํ์ฌ ์น ์ฑ๋ฅ์ ๋ง์คํฐํ์ธ์. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ ๋๋ง์ ๋ฏธ์น๋ ์ํฅ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ์ต์ ํ: ์ค์ ๋ ๋๋ง ๊ฒฝ๋ก ์ฌ์ธต ๋ถ์
์น ๊ฐ๋ฐ์ ์ธ๊ณ์์ ์๋๋ ๋จ์ํ ๊ธฐ๋ฅ์ด ์๋๋ผ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ธฐ์ด์ ๋๋ค. ๋๋ฆฌ๊ฒ ๋ก๋ฉ๋๋ ์น์ฌ์ดํธ๋ ๋์ ์ดํ๋ฅ , ๋ฎ์ ์ ํ์จ, ๊ทธ๋ฆฌ๊ณ ๋ถ๋ง์กฑ์ค๋ฌ์ด ์ฌ์ฉ์๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์น ์ฑ๋ฅ์ ๊ธฐ์ฌํ๋ ๋ง์ ์์ธ์ด ์์ง๋ง, ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๋ฉด์๋ ์ข ์ข ์คํด๋ฐ๋ ๊ฐ๋ ์ค ํ๋๋ ์ค์ ๋ ๋๋ง ๊ฒฝ๋ก(Critical Rendering Path, CRP)์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ๋ ์ค์ํ๊ฒ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด ๊ณผ์ ๊ณผ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ ์ฑ๋ฅ์ ๋ํด ์ง์งํ๊ฒ ์๊ฐํ๋ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ญํ ์ ์ด์ ์ ๋ง์ถฐ ์ค์ ๋ ๋๋ง ๊ฒฝ๋ก๋ฅผ ์ฌ์ธต์ ์ผ๋ก ๋ค๋ฃน๋๋ค. ์ด๋ฅผ ๋ถ์ํ๊ณ , ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ฉฐ, ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ ์๊ฒ ๋ง๋ค์ด ์ค ๊ฐ๋ ฅํ ์ต์ ํ ๊ธฐ์ ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ํ๊ตฌํ ๊ฒ์ ๋๋ค.
์ค์ ๋ ๋๋ง ๊ฒฝ๋ก๋ ๋ฌด์์ธ๊ฐ?
์ค์ ๋ ๋๋ง ๊ฒฝ๋ก๋ ๋ธ๋ผ์ฐ์ ๊ฐ HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ฉด์ ๋ณด์ด๋ ํฝ์ ๋ก ๋ณํํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ์ผ๋ จ์ ๋จ๊ณ์ ๋๋ค. CRP ์ต์ ํ์ ์ฃผ๋ ๋ชฉํ๋ '์คํฌ๋กค ์์ด ๋ณผ ์ ์๋ ๋ถ๋ถ(above-the-fold)'์ ์ด๊ธฐ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉ์์๊ฒ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ ๋๋งํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ณผ์ ์ด ๋น ๋ฅผ์๋ก ์ฌ์ฉ์๋ ํ์ด์ง๊ฐ ๋ ๋นจ๋ฆฌ ๋ก๋ฉ๋๋ค๊ณ ์ธ์ํฉ๋๋ค.
์ด ๊ฒฝ๋ก๋ ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- DOM ์์ฑ: ์ด ๊ณผ์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ๋ก๋ถํฐ HTML ๋ฌธ์์ ์ฒซ ๋ฐ์ดํธ๋ฅผ ์์ ํ ๋ ์์๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ HTML ๋งํฌ์ ์ ๋ฌธ์ ๋จ์๋ก ํ์ฑํ๊ธฐ ์์ํ์ฌ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(Document Object Model, DOM)์ ๊ตฌ์ถํฉ๋๋ค. DOM์ HTML ๋ฌธ์์ ๋ชจ๋ ๋ ธ๋(์์, ์์ฑ, ํ ์คํธ)๋ฅผ ๋ํ๋ด๋ ํธ๋ฆฌ์ ๊ฐ์ ๊ตฌ์กฐ์ ๋๋ค.
- CSSOM ์์ฑ: ๋ธ๋ผ์ฐ์ ๊ฐ DOM์ ๊ตฌ์ถํ๋ ๋์ CSS ์คํ์ผ์ํธ(
<link>ํ๊ทธ ๋๋ ์ธ๋ผ์ธ<style>๋ธ๋ก ๋ด)๋ฅผ ๋ง๋๋ฉด CSS ๊ฐ์ฒด ๋ชจ๋ธ(CSS Object Model, CSSOM)์ ๊ตฌ์ถํ๊ธฐ ์์ํฉ๋๋ค. DOM๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก CSSOM์ ํ์ด์ง์ ๋ชจ๋ ์คํ์ผ๊ณผ ๊ทธ ๊ด๊ณ๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋๋ค. HTML๊ณผ ๋ฌ๋ฆฌ CSS๋ ๋ ๋๋ง ์ฐจ๋จ(render-blocking)์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋ชจ๋ CSS๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ํ์ฑํ ๋๊น์ง ํ์ด์ง์ ์ด๋ค ๋ถ๋ถ๋ ๋ ๋๋งํ ์ ์์ต๋๋ค. ๋์ค์ ๋์ค๋ ์คํ์ผ์ด ์ด์ ์คํ์ผ์ ๋ฎ์ด์ธ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. - ๋ ๋ ํธ๋ฆฌ ์์ฑ: DOM๊ณผ CSSOM์ด ๋ชจ๋ ์ค๋น๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ด ๋์ ๊ฒฐํฉํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ํธ๋ฆฌ์๋ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ๋
ธ๋๋ง ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด,
display: none;์์ฑ์ ๊ฐ์ง ์์๋<head>ํ๊ทธ๋ ์๊ฐ์ ์ผ๋ก ๋ ๋๋ง๋์ง ์์ผ๋ฏ๋ก ๋ ๋ ํธ๋ฆฌ์ ํฌํจ๋์ง ์์ต๋๋ค. ๋ ๋ ํธ๋ฆฌ๋ ๋ฌด์์ ํ์ํ ์ง๋ ์์ง๋ง, ์ด๋์ ์ผ๋ง๋ ํฌ๊ฒ ํ์ํ ์ง๋ ๋ชจ๋ฆ ๋๋ค. - ๋ ์ด์์(๋๋ ๋ฆฌํ๋ก์ฐ): ๋ ๋ ํธ๋ฆฌ๊ฐ ๊ตฌ์ถ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ ์ด์์ ๋จ๊ณ๋ก ์งํํฉ๋๋ค. ์ด ๋จ๊ณ์์๋ ๋ทฐํฌํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๋ ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋์ ์ ํํ ํฌ๊ธฐ์ ์์น๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ๋จ๊ณ์ ์ถ๋ ฅ๋ฌผ์ ํ์ด์ง์ ๋ชจ๋ ์์์ ๋ํ ์ ๋ฐํ ๊ธฐํํ์ ๊ตฌ์กฐ๋ฅผ ๋ด์ '๋ฐ์ค ๋ชจ๋ธ'์ ๋๋ค.
- ํ์ธํธ: ๋ง์ง๋ง์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ ๋ ์ด์์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ฐ ๋ ธ๋์ ๋ํ ํฝ์ ์ ํ๋ฉด์ 'ํ์ธํธ'ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ ์คํธ, ์์, ์ด๋ฏธ์ง, ํ ๋๋ฆฌ, ๊ทธ๋ฆผ์ ๋ฑ์ ๊ทธ๋ฆฌ๋ ์์ , ์ฆ ํ์ด์ง์ ๋ชจ๋ ์๊ฐ์ ๋ถ๋ถ์ ๋์คํฐํํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ด ๊ณผ์ ์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ๋ฌ ๋ ์ด์ด์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํฉ์ฑ(Composite): ํ์ด์ง ์ฝํ ์ธ ๊ฐ ์ฌ๋ฌ ๋ ์ด์ด์ ํ์ธํธ๋ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ ์ต์ข ์ด๋ฏธ์ง๋ฅผ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด ์ด ๋ ์ด์ด๋ค์ ์ฌ๋ฐ๋ฅธ ์์๋ก ํฉ์ฑํด์ผ ํฉ๋๋ค. ์ด ๋จ๊ณ๋ ์ ๋๋ฉ์ด์ ์ด๋ ์คํฌ๋กค๋ง์ ํนํ ์ค์ํฉ๋๋ค. ํฉ์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ์ด์์ ๋ฐ ํ์ธํธ ๋จ๊ณ๋ฅผ ๋ค์ ์คํํ๋ ๊ฒ๋ณด๋ค ๊ณ์ฐ ๋น์ฉ์ด ์ ๊ฒ ๋ค๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ค์ ๋ ๋๋ง ๊ฒฝ๋ก์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐฉํด ์ญํ
๊ทธ๋ ๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด ๊ทธ๋ฆผ์์ ์ด๋์ ์์นํ ๊น์? ์๋ฐ์คํฌ๋ฆฝํธ๋ DOM๊ณผ CSSOM์ ๋ชจ๋ ์์ ํ ์ ์๋ ๊ฐ๋ ฅํ ์ธ์ด์ ๋๋ค. ํ์ง๋ง ์ด ๊ฐ๋ ฅํจ์๋ ๋๊ฐ๊ฐ ๋ฐ๋ฆ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ค์ ๋ ๋๋ง ๊ฒฝ๋ก๋ฅผ ์ฐจ๋จํ์ฌ ๋ ๋๋ง์ ์๋นํ ์ง์ฐ์ ์ด๋ํ ์ ์๊ณ , ์ข ์ข ๊ทธ๋ ๊ฒ ํฉ๋๋ค.
ํ์ ์ฐจ๋จ ์๋ฐ์คํฌ๋ฆฝํธ
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ ์ฐจ๋จ(parser-blocking)์
๋๋ค. ๋ธ๋ผ์ฐ์ ์ HTML ํ์๊ฐ <script> ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ๊ตฌ์ถ ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ค์งํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ (์ธ๋ถ ํ์ผ์ธ ๊ฒฝ์ฐ) ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ , ํ์ฑํ๋ฉฐ, ์คํํฉ๋๋ค. ์ด ๊ณผ์ ์ด ์ฐจ๋จ๋๋ ์ด์ ๋ ์คํฌ๋ฆฝํธ๊ฐ ์ ์ฒด DOM ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ document.write()์ ๊ฐ์ ์์
์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ธ๋ผ์ฐ์ ๋ HTML ํ์ฑ์ ์์ ํ๊ฒ ์ฌ๊ฐํ๊ธฐ ์ ์ ์คํฌ๋ฆฝํธ๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์๋ฐ์ ์์ต๋๋ค.
๋ง์ฝ ์ด ์คํฌ๋ฆฝํธ๊ฐ ๋ฌธ์์ <head>์ ์์นํ๋ค๋ฉด, ์ด๋ DOM ๊ตฌ์ถ์ ๋งจ ์ฒ์๋ถํฐ ์ฐจ๋จํฉ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋งํ ์ฝํ
์ธ ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์ฌ์ฉ์๋ ์คํฌ๋ฆฝํธ๊ฐ ์์ ํ ์ฒ๋ฆฌ๋ ๋๊น์ง ๋น ํฐ ํ๋ฉด์ ์ณ๋ค๋ณด๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ธ์ง๋๋ ์ฑ๋ฅ ์ ํ์ ์ฃผ๋ ์์ธ์
๋๋ค.
DOM ๋ฐ CSSOM ์กฐ์
์๋ฐ์คํฌ๋ฆฝํธ๋ CSSOM์ ์ฟผ๋ฆฌํ๊ณ ์์ ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์คํฌ๋ฆฝํธ๊ฐ element.style.width์ ๊ฐ์ ๊ณ์ฐ๋ ์คํ์ผ์ ์์ฒญํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ ํํ ๋ต๋ณ์ ์ ๊ณตํ๊ธฐ ์ํด ๋จผ์ ๋ชจ๋ CSS๊ฐ ๋ค์ด๋ก๋๋๊ณ ํ์ฑ๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ CSS ์ฌ์ด์ ์์กด์ฑ์ ๋ง๋ค์ด, ์คํฌ๋ฆฝํธ ์คํ์ด CSSOM์ด ์ค๋น๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์ฐจ๋จ๋ ์ ์์ต๋๋ค.
๋ ๋์๊ฐ, ๋ง์ฝ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM์ ์์ ํ๊ฑฐ๋(์: ์์ ์ถ๊ฐ ๋๋ ์ ๊ฑฐ) CSSOM์ ์์ ํ๋ฉด(์: ํด๋์ค ๋ณ๊ฒฝ) ๋ธ๋ผ์ฐ์ ์์ ์ ์ฐ์ ๋ฐ์์ ์ผ์ผํฌ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ๋ธ๋ผ์ฐ์ ๋ ๋ ์ด์์์ ๋ค์ ๊ณ์ฐ(๋ฆฌํ๋ก์ฐ)ํ๊ณ ์ํฅ์ ๋ฐ๋ ํ๋ฉด ๋ถ๋ถ์ด๋ ์ฌ์ง์ด ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ํ์ธํธํด์ผ ํ ์ ์์ต๋๋ค. ๋น๋ฒํ๊ฑฐ๋ ์๋ชป๋ ํ์ด๋ฐ์ ์กฐ์์ ๋๋ฆฌ๊ณ ๋ฐ์ ์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ค์ ๋ ๋๋ง ๊ฒฝ๋ก ๋ถ์ ๋ฐฉ๋ฒ
์ต์ ํํ๊ธฐ ์ ์ ๋จผ์ ์ธก์ ํด์ผ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ CRP๋ฅผ ๋ถ์ํ๋ ๋ฐ ๊ฐ์ฅ ์ข์ ์น๊ตฌ์ ๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ฅผ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ ๋ชจ์์ ์ ๊ณตํ๋ Chrome DevTools์ ์ด์ ์ ๋ง์ถฐ ๋ณด๊ฒ ์ต๋๋ค.
Performance ํญ ์ฌ์ฉํ๊ธฐ
Performance ํญ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ์ํํ๋ ๋ชจ๋ ์์ ์ ๋ํ ์์ธํ ํ์๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค.
- Chrome DevTools๋ฅผ ์ฝ๋๋ค (Ctrl+Shift+I ๋๋ Cmd+Option+I).
- Performance ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ํ์๋ผ์ธ์ ์ฃผ์ ์งํ๋ฅผ ์ค๋ฒ๋ ์ด๋ก ํ์ํ๋ ค๋ฉด "Web Vitals" ์ฒดํฌ๋ฐ์ค๊ฐ ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- ์๋ก๊ณ ์นจ ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋ (Ctrl+Shift+E / Cmd+Shift+E)๋ฅผ ๋๋ฌ ํ์ด์ง ๋ก๋ ํ๋กํ์ผ๋ง์ ์์ํฉ๋๋ค.
ํ์ด์ง ๋ก๋๊ฐ ๋๋๋ฉด ๋ถ๊ฝ ์ฐจํธ(flame chart)๊ฐ ํ์๋ฉ๋๋ค. ์ฌ๊ธฐ Main ์ค๋ ๋ ์น์ ์์ ์ฐพ์์ผ ํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ธด ์์ (Long Tasks): 50๋ฐ๋ฆฌ์ด ์ด์ ๊ฑธ๋ฆฌ๋ ๋ชจ๋ ์์ ์ ๋นจ๊ฐ์ ์ผ๊ฐํ์ผ๋ก ํ์๋ฉ๋๋ค. ์ด๋ฌํ ์์ ์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๊ณ UI๋ฅผ ๋ฐ์ ์๊ฒ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ์ต์ ํ์ ์ฃผ์ ๋์์ ๋๋ค.
- HTML ํ์ฑ(Parse HTML, ํ๋์): ๋ธ๋ผ์ฐ์ ๊ฐ HTML์ ํ์ฑํ๋ ์์น๋ฅผ ๋ณด์ฌ์ค๋๋ค. ํฐ ๊ฐ๊ฒฉ์ด๋ ์ค๋จ์ด ๋ณด์ธ๋ค๋ฉด, ์ด๋ ์ฐจ๋จ ์คํฌ๋ฆฝํธ ๋๋ฌธ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
- ์คํฌ๋ฆฝํธ ํ๊ฐ(Evaluate Script, ๋ ธ๋์): ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๊ณณ์ ๋๋ค. ํนํ ํ์ด์ง ๋ก๋ ์ด๊ธฐ์ ๊ธด ๋ ธ๋์ ๋ธ๋ก์ ์ฐพ์๋ณด์ธ์. ์ด๊ฒ๋ค์ด ๋ฐ๋ก ์ฐจ๋จ ์คํฌ๋ฆฝํธ์ ๋๋ค.
- ์คํ์ผ ์ฌ๊ณ์ฐ(Recalculate Style, ๋ณด๋ผ์): CSSOM ์์ฑ ๋ฐ ์คํ์ผ ๊ณ์ฐ์ ๋ํ๋ ๋๋ค.
- ๋ ์ด์์(Layout, ๋ณด๋ผ์): ์ด ๋ธ๋ก๋ค์ ๋ ์ด์์ ๋๋ ๋ฆฌํ๋ก์ฐ ๋จ๊ณ๋ฅผ ๋ํ๋ ๋๋ค. ๋ง์ฝ ์ด๋ฐ ๋ธ๋ก์ด ๋ง์ด ๋ณด์ธ๋ค๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ธฐํํ์ ์์ฑ์ ๋ฐ๋ณต์ ์ผ๋ก ์ฝ๊ณ ์ฐ๋ฉด์ '๋ ์ด์์ ์ค๋์ฑ(layout thrashing)'์ ์ ๋ฐํ๊ณ ์์ ์ ์์ต๋๋ค.
- ํ์ธํธ(Paint, ๋ น์): ํ์ธํ ๊ณผ์ ์ ๋๋ค.
Network ํญ ์ฌ์ฉํ๊ธฐ
Network ํญ์ ํญํฌ์ ์ฐจํธ(waterfall chart)๋ ๋ฆฌ์์ค ๋ค์ด๋ก๋ ์์์ ๊ธฐ๊ฐ์ ์ดํดํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- DevTools๋ฅผ ์ด๊ณ Network ํญ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํฉ๋๋ค.
- ํญํฌ์ ๋ทฐ๋ ๊ฐ ๋ฆฌ์์ค(HTML, CSS, JS, ์ด๋ฏธ์ง)๊ฐ ์ธ์ ์์ฒญ๋๊ณ ๋ค์ด๋ก๋๋์๋์ง ๋ณด์ฌ์ค๋๋ค.
ํญํฌ์ ์ฐจํธ ์๋จ์ ์์ฒญ์ ์ธ์ฌํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ธ์. ํ์ด์ง๊ฐ ๋ ๋๋ง๋๊ธฐ ์ ์ ๋ค์ด๋ก๋๋๋ CSS ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ด๊ฒ๋ค์ด ๋ฐ๋ก ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค์ ๋๋ค.
Lighthouse ์ฌ์ฉํ๊ธฐ
Lighthouse๋ Chrome DevTools(Lighthouse ํญ ์๋)์ ๋ด์ฅ๋ ์๋ํ๋ ๊ฐ์ฌ ๋๊ตฌ์ ๋๋ค. ๋์ ์์ค์ ์ฑ๋ฅ ์ ์์ ์คํ ๊ฐ๋ฅํ ๊ถ์ฅ ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
CRP์ ๋ํ ํต์ฌ ๊ฐ์ฌ๋ "๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค ์ ๊ฑฐ"์ ๋๋ค. ์ด ๋ณด๊ณ ์๋ FCP(First Contentful Paint)๋ฅผ ์ง์ฐ์ํค๋ CSS ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ช ์์ ์ผ๋ก ๋์ดํ์ฌ ์ต์ ํ ๋์์ ๋ช ํํ๊ฒ ์ ์ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ํ ํต์ฌ ์ต์ ํ ์ ๋ต
์ด์ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐฉ๋ฒ์ ์์์ผ๋, ํด๊ฒฐ์ฑ ์ ํ์ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ชฉํ๋ ์ด๊ธฐ ๋ ๋๋ง์ ์ฐจ๋จํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์ต์ํํ๋ ๊ฒ์ ๋๋ค.
1. `async`์ `defer`์ ํ
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ HTML ํ์๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ <script> ํ๊ทธ์ `async` ๋ฐ `defer` ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
- ํ์ค
<script>:<script src="script.js"></script>
์์ ๋ ผ์ํ๋ฏ์ด, ์ด๊ฒ์ ํ์๋ฅผ ์ฐจ๋จํฉ๋๋ค. HTML ํ์ฑ์ด ์ค์ง๋๊ณ , ์คํฌ๋ฆฝํธ๊ฐ ๋ค์ด๋ก๋ ๋ฐ ์คํ๋ ํ ํ์ฑ์ด ์ฌ๊ฐ๋ฉ๋๋ค. <script async>:<script src="script.js" async></script>
์คํฌ๋ฆฝํธ๋ HTML ํ์ฑ๊ณผ ๋ณ๋ ฌ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค. ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋ ์ฆ์ HTML ํ์ฑ์ด ์ผ์ ์ค์ง๋๊ณ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ฉ๋๋ค. ์คํ ์์๋ ๋ณด์ฅ๋์ง ์์ผ๋ฉฐ, ์คํฌ๋ฆฝํธ๋ ๋ค์ด๋ก๋๋๋ ์์๋๋ก ์คํ๋ฉ๋๋ค. ์ด๋ ๋ถ์์ด๋ ๊ด๊ณ ์คํฌ๋ฆฝํธ์ฒ๋ผ DOM์ด๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์์กดํ์ง ์๋ ๋ ๋ฆฝ์ ์ธ ์๋ํํฐ ์คํฌ๋ฆฝํธ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค.<script defer>:<script src="script.js" defer></script>
์คํฌ๋ฆฝํธ๋ HTML ํ์ฑ๊ณผ ๋ณ๋ ฌ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค. ํ์ง๋ง ์คํฌ๋ฆฝํธ๋ HTML ๋ฌธ์ ํ์ฑ์ด ์์ ํ ๋๋ ํ์๋ง(DOMContentLoaded์ด๋ฒคํธ ์ง์ ) ์คํ๋ฉ๋๋ค. `defer` ์์ฑ์ด ์๋ ์คํฌ๋ฆฝํธ๋ ๋ฌธ์์ ๋ํ๋๋ ์์๋๋ก ์คํ๋๋ ๊ฒ์ด ๋ณด์ฅ๋ฉ๋๋ค. ์ด๊ฒ์ DOM๊ณผ ์ํธ ์์ฉํด์ผ ํ์ง๋ง ์ด๊ธฐ ํ์ธํธ์ ์ค์ํ์ง ์์ ๋๋ถ๋ถ์ ์คํฌ๋ฆฝํธ์ ์ ํธ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ท์น: ์ฃผ์ ์ ํ๋ฆฌ์ผ์ด์
์คํฌ๋ฆฝํธ์๋ `defer`๋ฅผ ์ฌ์ฉํ์ธ์. ๋
๋ฆฝ์ ์ธ ์๋ํํฐ ์คํฌ๋ฆฝํธ์๋ `async`๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๊ธฐ ๋ ๋๋ง์ ์ ๋์ ์ผ๋ก ํ์์ ์ด์ง ์์ ํ <head>์์ ์ฐจ๋จ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์.
2. ์ฝ๋ ๋ถํ (Code Splitting)
์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๋จ์ผ์ ํฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ๋ฒ๋ค๋ง๋ฉ๋๋ค. ์ด๊ฒ์ด HTTP ์์ฒญ ์๋ฅผ ์ค์ฌ์ฃผ๊ธฐ๋ ํ์ง๋ง, ์ฌ์ฉ์๊ฐ ์ด๊ธฐ ํ์ด์ง ๋ทฐ์ ํ์ํ์ง ์์ ์ ์๋ ๋ง์ ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๋๋ก ๊ฐ์ํฉ๋๋ค.
์ฝ๋ ๋ถํ ์ ๊ทธ ํฐ ๋ฒ๋ค์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ(chunk)๋ก ๋๋๋ ๊ณผ์ ์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ด๊ธฐ ์ฒญํฌ: ํ์ฌ ํ์ด์ง์ ๋ณด์ด๋ ๋ถ๋ถ์ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ํ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ํฌํจํฉ๋๋ค.
- ์จ๋๋งจ๋ ์ฒญํฌ: ๋ค๋ฅธ ๋ผ์ฐํธ, ๋ชจ๋ฌ ๋๋ ์คํฌ๋กค ์๋ ๊ธฐ๋ฅ์ ๋ํ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค. ์ด๊ฒ๋ค์ ์ฌ์ฉ์๊ฐ ํด๋น ๋ผ์ฐํธ๋ก ์ด๋ํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ง ๋ก๋๋ฉ๋๋ค.
Webpack, Rollup, Parcel๊ณผ ๊ฐ์ ์ต์ ๋ฒ๋ค๋ฌ๋ค์ ๋์ `import()` ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ถํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. React(React.lazy ์ฌ์ฉ)๋ Vue์ ๊ฐ์ ํ๋ ์์ํฌ๋ค๋ ์ปดํฌ๋ํธ ์์ค์์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ถํ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
3. ํธ๋ฆฌ ์์ดํน๊ณผ ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ
์ฝ๋ ๋ถํ ์ ํ๋๋ผ๋ ์ด๊ธฐ ๋ฒ๋ค์ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค์ง๋ง ๊ทธ ์ค ์ผ๋ถ๋ง ์ฌ์ฉํ ๋ ํํ ๋ฐ์ํฉ๋๋ค.
ํธ๋ฆฌ ์์ดํน(Tree Shaking)์ ์ต์ ๋ฒ๋ค๋ฌ๊ฐ ์ต์ข ๋ฒ๋ค์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋ก์ธ์ค์ ๋๋ค. `import`์ `export` ๋ฌธ์ ์ ์ ์ผ๋ก ๋ถ์ํ์ฌ ๋๋ฌํ ์ ์๋ ์ฝ๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ํ์ํ ์ฝ๋๋ง ์ ๊ณตํจ์ผ๋ก์จ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ฌ ๋ค์ด๋ก๋ ๋ฐ ํ์ฑ ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
4. ์ถ์(Minification) ๋ฐ ์์ถ(Compression)
์ด๊ฒ๋ค์ ๋ชจ๋ ํ๋ก๋์ ์น์ฌ์ดํธ์ ๋ํ ๊ธฐ๋ณธ ๋จ๊ณ์ ๋๋ค.
- ์ถ์: ์ฝ๋์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์ ๊ณต๋ฐฑ, ์ฃผ์, ๊ฐํ ๋ฌธ์ ๋ฑ ๋ถํ์ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ณ์ ์ด๋ฆ์ ์ค์ด๋ ์๋ํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ด๋ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค. Terser(์๋ฐ์คํฌ๋ฆฝํธ์ฉ)์ cssnano(CSS์ฉ)์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์์ถ: ์ถ์ ํ, ์๋ฒ๋ ํ์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด๊ธฐ ์ ์ ์์ถํด์ผ ํฉ๋๋ค. Gzip์ด๋ ๋ ํจ๊ณผ์ ์ธ Brotli์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ต๋ 70-80%๊น์ง ์ค์ผ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ํ์ผ์ ๋ฐ์ผ๋ฉด ์์ถ์ ํด์ ํฉ๋๋ค. ์ด๊ฒ์ ์๋ฒ ์ค์ ์ด์ง๋ง ๋คํธ์ํฌ ์ ์ก ์๊ฐ์ ์ค์ด๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
5. ์ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ๋ผ์ด๋ (์ฃผ์ํด์ ์ฌ์ฉ)
์ฒซ ํ์ธํธ์ ์ ๋์ ์ผ๋ก ํ์์ ์ธ ๋งค์ฐ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์กฐ๊ฐ(์: ํ
๋ง ์ค์ ๋๋ ์ค์ํ ํด๋ฆฌํ)์ ๊ฒฝ์ฐ, <head> ์์ <script> ํ๊ทธ ๋ด์ ์ง์ HTML์ ์ธ๋ผ์ธ์ผ๋ก ํฌํจํ ์ ์์ต๋๋ค. ์ด๋ ๋คํธ์ํฌ ์์ฒญ์ ์ ์ฝํ์ฌ ์ง์ฐ ์๊ฐ์ด ๊ธด ๋ชจ๋ฐ์ผ ์ฐ๊ฒฐ์์ ์ ๋ฆฌํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ ๋๋ฌผ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ธ๋ผ์ธ ์ฝ๋๋ HTML ๋ฌธ์์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํค๊ณ ๋ธ๋ผ์ฐ์ ์์ ๋ณ๋๋ก ์บ์ํ ์ ์์ต๋๋ค. ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํ ํธ๋ ์ด๋์คํ์
๋๋ค.
๊ณ ๊ธ ๊ธฐ์ ๋ฐ ์ต์ ์ ๊ทผ ๋ฐฉ์
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR) ๋ฐ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)
Next.js(React์ฉ), Nuxt.js(Vue์ฉ), SvelteKit๊ณผ ๊ฐ์ ํ๋ ์์ํฌ๋ SSR๊ณผ SSG๋ฅผ ๋์คํํ์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ด๊ธฐ ๋ ๋๋ง ์์ ์ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ์ด์ ํฉ๋๋ค.
- SSR: ์๋ฒ๋ ์์ฒญ๋ ํ์ด์ง์ ์ ์ฒด HTML์ ๋ ๋๋งํ์ฌ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด HTML์ ์ฆ์ ํ์ํ ์ ์์ผ๋ฏ๋ก ๋งค์ฐ ๋น ๋ฅธ FCP๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋์ด ํ์ด์ง๋ฅผ 'ํ์ด๋๋ ์ด์ (hydrate)'ํ์ฌ ์ํธ์์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.
- SSG: ๋ชจ๋ ํ์ด์ง์ HTML์ด ๋น๋ ์์ ์์ฑ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์์ฒญํ๋ฉด ์ ์ HTML ํ์ผ์ด CDN์์ ์ฆ์ ์ ๊ณต๋ฉ๋๋ค. ์ด๊ฒ์ ์ฝํ ์ธ ์ค์ฌ์ ์ฌ์ดํธ์ ๊ฐ์ฅ ๋น ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
SSR๊ณผ SSG ๋ชจ๋ ํด๋ผ์ด์ธํธ ์ธก ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ถ๋ถ์ด ์คํ๋๊ธฐ ์ ์ ์๋ฏธ ์๋ ์ฒซ ํ์ธํธ๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ CRP ์ฑ๋ฅ์ ๊ทน์ ์ผ๋ก ํฅ์์ํต๋๋ค.
์น ์์ปค(Web Workers)
์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํ ๋ฐ์ดํฐ ๋ถ์, ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋๋ ์ํธํ์ ๊ฐ์ด ๋ฌด๊ฒ๊ณ ์ค๋ ์คํ๋๋ ๊ณ์ฐ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ๋ฉ์ธ ์ค๋ ๋์์ ์ํํ๋ฉด ๋ ๋๋ง์ ์ฐจ๋จํ๊ณ ํ์ด์ง๊ฐ ๋ฉ์ถ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๊ฒ ํฉ๋๋ค. ์น ์์ปค๋ ์ด๋ฌํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฉ์ธ UI ์ค๋ ๋์ ์์ ํ ๋ถ๋ฆฌ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์คํํ ์ ์๊ฒ ํ์ฌ ํด๊ฒฐ์ฑ ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฌด๊ฑฐ์ด ์์ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์งํ๋๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
CRP ์ต์ ํ๋ฅผ ์ํ ์ค์ฉ์ ์ธ ์ํฌํ๋ก์ฐ
์ด ๋ชจ๋ ๊ฒ์ ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์๋ ์คํ ๊ฐ๋ฅํ ์ํฌํ๋ก์ฐ๋ก ๋ฌถ์ด ๋ณด๊ฒ ์ต๋๋ค.
- ๊ฐ์ฌ(Audit): ๊ธฐ์ค์ ๋ถํฐ ์์ํ์ธ์. ํ๋ก๋์ ๋น๋์์ Lighthouse ๋ณด๊ณ ์์ Performance ํ๋กํ์ผ์ ์คํํ์ฌ ํ์ฌ ์ํ๋ฅผ ํ์ ํฉ๋๋ค. FCP, LCP, TTI๋ฅผ ๊ธฐ๋กํ๊ณ ๊ธด ์์ ์ด๋ ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค.
- ์๋ณ(Identify): DevTools์ Network ๋ฐ Performance ํญ์ ๊น์ด ํ๊ณ ๋ค์ด ์ด๋ค ์คํฌ๋ฆฝํธ์ ์คํ์ผ์ํธ๊ฐ ์ด๊ธฐ ๋ ๋๋ง์ ์ฐจ๋จํ๋์ง ์ ํํ ์ฐพ์๋ ๋๋ค. ๊ฐ ๋ฆฌ์์ค์ ๋ํด ์๋ฌธํด ๋ณด์ธ์: "์ด๊ฒ์ด ์ฌ์ฉ์๊ฐ ์ด๊ธฐ ์ฝํ ์ธ ๋ฅผ ๋ณด๋ ๋ฐ ์ ๋์ ์ผ๋ก ํ์ํ๊ฐ?"
- ์ฐ์ ์์ ์ง์ (Prioritize): ์คํฌ๋กค ์์ด ๋ณผ ์ ์๋ ์ฝํ ์ธ ์ ์ํฅ์ ๋ฏธ์น๋ ์ฝ๋์ ๋ ธ๋ ฅ์ ์ง์คํ์ธ์. ๋ชฉํ๋ ์ด ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉ์์๊ฒ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์ ๋ฌํ๋ ๊ฒ์ ๋๋ค. ๊ทธ ์ธ์ ๋ชจ๋ ๊ฒ์ ๋์ค์ ๋ก๋๋ ์ ์์ต๋๋ค.
- ์ต์ ํ(Optimize):
- ๋ชจ๋ ๋นํ์ ์คํฌ๋ฆฝํธ์
defer๋ฅผ ์ ์ฉํ์ธ์. - ๋
๋ฆฝ์ ์ธ ์๋ํํฐ ์คํฌ๋ฆฝํธ์๋
async๋ฅผ ์ฌ์ฉํ์ธ์. - ๋ผ์ฐํธ์ ๋ํ ์ปดํฌ๋ํธ์ ๋ํด ์ฝ๋ ๋ถํ ์ ๊ตฌํํ์ธ์.
- ๋น๋ ํ๋ก์ธ์ค์ ์ถ์ ๋ฐ ํธ๋ฆฌ ์์ดํน์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ์ธ์.
- ์ธํ๋ผ ํ๊ณผ ํ๋ ฅํ์ฌ ์๋ฒ์์ Brotli ๋๋ Gzip ์์ถ์ ํ์ฑํํ์ธ์.
- CSS์ ๊ฒฝ์ฐ, ์ด๊ธฐ ๋ทฐ์ ํ์ํ ์ค์ CSS๋ฅผ ์ธ๋ผ์ด๋ํ๊ณ ๋๋จธ์ง๋ ์ง์ฐ ๋ก๋ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ๋ชจ๋ ๋นํ์ ์คํฌ๋ฆฝํธ์
- ์ธก์ (Measure): ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌํํ ํ ๊ฐ์ฌ๋ฅผ ๋ค์ ์คํํ์ธ์. ์๋ก์ด ์ ์์ ์๊ฐ์ ๊ธฐ์ค์ ๊ณผ ๋น๊ตํฉ๋๋ค. FCP๊ฐ ๊ฐ์ ๋์๋์? ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค๊ฐ ์ค์๋์?
- ๋ฐ๋ณต(Iterate): ์น ์ฑ๋ฅ์ ์ผํ์ฑ ์์ ์ด ์๋๋ผ ์ง์์ ์ธ ๊ณผ์ ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ์๋ก์ด ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ํ๋ ์ ์์ต๋๋ค. ์ฑ๋ฅ ๊ฐ์ฌ๋ฅผ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ์ฃผ๊ธฐ์ ์ ๊ธฐ์ ์ธ ์ผ๋ถ๋ก ๋ง๋์ธ์.
๊ฒฐ๋ก : ์ฑ๋ฅ์ผ๋ก ๊ฐ๋ ๊ธธ ๋ง์คํฐํ๊ธฐ
์ค์ ๋ ๋๋ง ๊ฒฝ๋ก๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ๋ฌ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ช ์ ๋ถ์ด๋ฃ๊ธฐ ์ํด ๋ฐ๋ฅด๋ ์ฒญ์ฌ์ง์ ๋๋ค. ๊ฐ๋ฐ์๋ก์ ์ด ๊ฒฝ๋ก, ํนํ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ด๋ จ๋ ๊ฒฝ๋ก์ ๋ํ ์ฐ๋ฆฌ์ ์ดํด์ ํต์ ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ์๋จ ์ค ํ๋์ ๋๋ค. ๋จ์ํ ์๋ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ฌ๊ณ ๋ฐฉ์์์ ์ฑ๋ฅ์ด ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ฌ๊ณ ๋ฐฉ์์ผ๋ก ์ ํํจ์ผ๋ก์จ, ์ฐ๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ผ ๋ฟ๋ง ์๋๋ผ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ณ , ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ, ์ฆ๊ฑฐ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๊ทธ ์ฌ์ ์ ๋ถ์์์ ์์๋ฉ๋๋ค. ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋กํ์ผ๋งํ๋ฉฐ, ์ฌ์ฉ์์ ์์ ํ ๋ ๋๋ง๋ ํ์ด์ง ์ฌ์ด์ ์๋ ๋ชจ๋ ๋ฆฌ์์ค์ ์๋ฌธ์ ์ ๊ธฐํ๊ธฐ ์์ํ์ธ์. ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ฐ์ํค๊ณ , ์ฝ๋๋ฅผ ๋ถํ ํ๋ฉฐ, ํ์ด๋ก๋๋ฅผ ์ต์ํํ๋ ์ ๋ต์ ์ ์ฉํจ์ผ๋ก์จ, ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ฅ ์ํ๋ ์ผ, ์ฆ ๋ฒ๊ฐ์ฒ๋ผ ๋น ๋ฅธ ์๋๋ก ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ ์ ์๋ ๊ธธ์ ์ด์ด์ค ์ ์์ต๋๋ค.